package com.hsnn.medstgmini.sys.service;

import java.util.List;
import java.util.Map;

import com.hsnn.medstgmini.sys.model.SysPrivilege;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 角色
 * @author 蔡春龙
 * @date 2015年6月12日
 */
public interface SysRoleManager {

	/**
	 * @category 查询用户所属角色
	 * @date 2015年6月12日
	 * @param user
	 * @return
	 */
	List<SysRole> getRoleListByUser(SysUser user);

	/**
	 * @category 中心查询角色管理列表
	 * @date 2015年6月14日
	 * @param page
	 * @param role
	 * @return
	 */
	List<SysRole> getZxRoleList(Pagination page, SysRole role);

	/**
	 * @category 启用|停用
	 * @param hospInfo
	 */
	void changeStatus(SysRole role);

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	void batchChangeStatus(List<SysRole> list);

	/**
	 * @category 启用|停用
	 * @param hospInfo
	 */
	void subChangeStatus(SysRole role);

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	void subBatchChangeStatus(List<SysRole> list);

	/**
	 * @category 根据id查询角色信息
	 * @date 2015年6月14日
	 * @param id
	 * @return
	 */
	SysRole getRoleById(String id);

	/**
	 * @category 中心保存角色信息
	 * @date 2015年6月14日
	 * @param role
	 */
	void zxSaveRole(SysRole role, List<SysPrivilege> list);
	
	/**
	 * @category 中心保存子角色信息
	 * @author 韩守松
	 * @date   2015年10月16日
	 * @param  @param role
	 */
	void zxSaveRole(SysRole role);

	/**
	 * @category 中心查询父级角色列表
	 * @date 2015年6月15日
	 * @param exceptRoleId为需要排除的id
	 * @return
	 */
	List<SysRole> getZxFatherRoleList(String... exceptRoleId);

	/**
	 * @category 医疗机构、生产企业、配送企业管理员查询公共子角色和自定义子角色管理列表
	 * @date 2015年6月16日
	 * @param page翻页
	 * @param role当前管理员角色
	 * @param userId当前管理员id
	 * @return
	 */
	List<SysRole> getSubRoleList(Pagination page, SysRole role,
			SysRole editRole, String userId);

	/**
	 * @category 中心查询角色管理列表
	 * @date 2015年6月14日
	 * @param role
	 * @return
	 */
	List<SysRole> getZxRoleList();

	/**
	 * @category 中心、医疗机构、生产企业、配送企业查询子角色列表
	 * @date 2015年6月14日
	 * @param role
	 * @return
	 */
	List<SysRole> getSubRoleList(SysUser user);
	List<Object> getSubRoleListByType(String roleId,String orgId);

	/**
	 * @category 获取父级角色列表
	 * @author 韩守松
	 * @date   2015年10月19日
	 * @param  @return
	 */
	List<Object[]> getFatherIdList(String roleId,String boundId);
	
	/**
	 * @category 根据主账户id获取主角色id
	 * @author 韩守松
	 * @date   2015年10月19日
	 * @param  @param userRootId
	 * @param  @return
	 */
	String getUserRoleById(String userRootId);
	
	Pagination getSubRoleList(Pagination page,boolean isLoaded);
	
	/**
	 * @category 根据父级角色id更新其子角色数据（status）
	 * @author 韩守松
	 * @date   2015年10月21日
	 * @param  @param pid
	 * @param  @param level
	 */
	void updateByPid(String id,Integer level);
	
	public void addRole(SysRole role);
	public void eidtRole(SysRole role);
	public void deleteRole(String id);
	public List getUserRoleList(String userId);
	
}
